#include <iostream>
#include <future>
#include <thread>
#include <chrono>


void add(int num1, int num2, std::promise<int>& prom)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    std::cout << "加法" << std::endl;
    int sum = num1 + num2;
    prom.set_value(sum);
}

int main()
{
    // promise可以手动向future设置值，这样异步等待任务结果的线程就可以拿到结果，结束等待
    std::promise<int> prom;
    std::future<int> ret = prom.get_future();


    // 创建一个线程，异步执行加法任务。将 promise 作为参数传递，在异步线程中通过 p 向future设置结果
    std::thread th1(add, 10, 20, std::ref(prom));

    // promise 设置值以后，future 就可以得到任务执行结果
    std::cout << "等待任务执行结果" << std::endl;
    std::cout << ret.get() << std::endl;

    th1.join();
    return 0;
}